package it.univaq.mwt.arssa.presentation.dipendenti;

import it.univaq.mwt.arssa.business.ArssaBusinessFactory;
import it.univaq.mwt.arssa.business.DipendentiService;
import it.univaq.mwt.arssa.business.RuoliService;
import it.univaq.mwt.arssa.business.SediService;
import it.univaq.mwt.arssa.business.model.Dipendente;
import it.univaq.mwt.arssa.business.model.Ruolo;
import it.univaq.mwt.arssa.business.model.Sede;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction;

public class DipendentiAction extends MappingDispatchAction{
	
	public ActionForward activemodificadipendente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		//ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		HttpSession session = request.getSession();
		
		Dipendente dipendente = (Dipendente) session.getAttribute("dipendente");
		int id = dipendente.getId();
		//RuoliService ruoliService = factory.getRuoliService();
		//SediService sediService = factory.getSediService();
					
		DipendentiForm dipendentiForm = (DipendentiForm) form;
	
		BeanUtils.copyProperties(dipendentiForm, dipendente); // copio tutti i parametri nella form
		
		request.setAttribute("id", id);
		request.setAttribute("dipendente", dipendente);
		request.setAttribute("titoloForm", "Modifica qui i tuoi dati "); // setto il titolo della form
		request.setAttribute("action", "/public/dipendente/modificadipendente"); // setto la action
		
		saveToken(request);
		
		return mapping.findForward("dipendente.form"); 
	}
		
	public ActionForward modificadipendente(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		DipendentiService dipendentiService = factory.getDipendentiService();
		RuoliService ruoliService = factory.getRuoliService();
		SediService sediService = factory.getSediService();
		
		request.setAttribute("titoloForm", "Modifica qui i tuoi dati"); // setto il titolo della form per dipendente.result
				
		if (!isTokenValid(request, false)) {
			// setto gli errori
			request.setAttribute("errore", 1); // setto la tipologia di errore/successo
			request.setAttribute("msg", "Errore double submit"); // setto il messaggio
			return mapping.findForward("dipendente.result");
		}
				
		DipendentiForm dipendentiForm = (DipendentiForm) form;
		int id = dipendentiForm.getId();
		String nome = dipendentiForm.getNome();
		String cognome = dipendentiForm.getCognome();
		String username = dipendentiForm.getUsername();
		String password = dipendentiForm.getPassword();
		String matricola = dipendentiForm.getMatricola();
		String codiceFiscale = dipendentiForm.getCodiceFiscale();
		String email = dipendentiForm.getEmail();
		String cellulare = dipendentiForm.getCellulare();
		String citta = dipendentiForm.getCitta();
		String via = dipendentiForm.getVia();
		String numeroCivico = dipendentiForm.getNumeroCivico();
		int idRuolo = dipendentiService.cercaDipendente(id).getRuolo().getId();
		int idSede = dipendentiService.cercaDipendente(id).getSede().getId();
		int ferie = dipendentiService.cercaDipendente(id).getFerie();
		String straordinari = dipendentiService.cercaDipendente(id).getStraordinari();	
		
		Ruolo ruolo = ruoliService.cercaRuolo(idRuolo);
		Sede sede = sediService.cercaSede(idSede);
		Dipendente dipendente = new Dipendente(id, matricola, username, password, nome, cognome, codiceFiscale, email, cellulare, citta, via, numeroCivico, ruolo, sede, ferie, straordinari);
		
		dipendentiService.modificaDipendente(dipendente);
		
		// se arrivo qui,non ho ricevuto errori 
		request.setAttribute("errore", 0); // setto la tipologia di successo
		request.setAttribute("msg", "Dati modificati con successo"); // setto il messaggio
		
		resetToken(request);
		
		return mapping.findForward("dipendente.result");
	}
	
	public ActionForward visualizzacedolino(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		//ArssaBusinessFactory factory = ArssaBusinessFactory.getInstance();
		HttpSession session = request.getSession();
		
		Dipendente dipendente = (Dipendente) session.getAttribute("dipendente");
		int id = dipendente.getId();
		//RuoliService ruoliService = factory.getRuoliService();
		//SediService sediService = factory.getSediService();
					
		DipendentiForm dipendentiForm = (DipendentiForm) form;
	
		BeanUtils.copyProperties(dipendentiForm, dipendente); // copio tutti i parametri nella form
		
		request.setAttribute("id", id);
		request.setAttribute("dipendente", dipendente);
		request.setAttribute("titoloForm", "Modifica qui i tuoi dati "); // setto il titolo della form
		request.setAttribute("action", "/public/dipendente/modificadipendente"); // setto la action
		
		saveToken(request);
		
		return mapping.findForward("dipendente.form"); 
	}

}
